(function() {

  'use strict';
  /**
   * @ngdoc RMqueryRoleModule
   * @name cmmdApp  
   * @systemManger 聂开枥
   */
  angular.module('controllers.faultLocation.alarmStatisticAnalysis')
    .controller('endAnalysisCtrl', ['$scope', 'endAnalysisServer', '$mdDialog', '$filter', 'CoreService', 'endDetailedServer', endAnalysis]);
  angular.module('controllers.faultLocation.alarmStatisticAnalysis')
    .controller('analysisChar', ['$scope', 'endAnalysisServer', '$mdDialog', '$filter', '$state', 'CoreService', analysisChar]);
  /**
   *  下拉选项
   *  给默认初始值时间为当前时间 
   *  省份,业务名称,系统名称,显示方式为请选择字样,【组建需修改,前台无法与控制器双向绑定】
   */
  function endAnalysis($scope, endAnalysisServer, $mdDialog, $filter, CoreService, endDetailedServer) {
    $scope.flex = true;
    $scope.param = {};
    $scope.param.date = new Date();
    //查询系统名称 
    endAnalysisServer.systemQuery(function(result) {
      $scope.systems = result.data;
    });
    //默认系统名称
    $scope.param.provinceCode = '200';
    $scope.param.systemCode = '11';
    //根据系统的变化给出联级变化的业务名称
    $scope.$watch('param.systemCode', function(value) {
      $scope.querybusiness();
      if (value === '11') {
        $scope.param.businessCode = '01';
      } else {
        $scope.param.businessCode = '11';
      }
    });
    // 当没有选择的时候默认给数组清空,并且给默认值为全选,把数组设置为undefined  
    //业务展示列表和查询选择项的控制器默认为关闭状态
    $scope.shoumun = 1;
    $scope.dropDrowSw = function() {
      if ($scope.tradeForm.$invalid) {
        return;
      }
      if (Boolean($scope.shoumun)) {
        $scope.querytime();
      } else {
        $scope.shoumun = 1;
      }
    };
    //查询业务名称
    $scope.querybusiness = function() {
      var item = {};
      item.systemCode = $scope.param.systemCode;
      return endAnalysisServer.businessQuery(item).then(function(result) {
        $scope.business = result.data;
      });
    };
    //省份查询:给省份默认代码
    endAnalysisServer.provinceQuery(function(result) {
      $scope.provinces = result.data;
    });
    //查询断到端时长分析
    $scope.querytime = function() {
      endAnalysisServer.queryTime($scope.param, function(result) {
        if (result.data.length > 0) {
          endDetailedServer.param = $scope.param;
          $scope.shoumun = 0;
          var formParam = {};
          $scope.$broadcast('querytimeresult', result);
        } else {
          CoreService.dialog('没有数据', '提示');
        }
      });
    };
  }



  function analysisChar($scope, endAnalysisServer, $mdDialog, $filter, $state, CoreService) {
    var demo = echarts.init(document.getElementById('main'));
    var demon = echarts.init(document.getElementById('mainn'));
    $scope.$on('querytimeresult', function(e, d) {
      charQuery(d);
    });
    //给图表默认显示
    function charQuery(result) {
      if (result.data.length === 0) {
        $scope.isResponded.isRespondedSw = false;
        CoreService.dialog(result.state, '提示');
      } else {
        var xAxisData = ['0秒至5秒', '5秒至10秒', '10秒至20', '20秒至30秒', '30秒至40秒', '40秒至50秒', '50秒至60秒', '60秒以上'];
        var textName = $filter('date')($scope.param.date, 'yyyy-MM-dd') + ' 端到端时长分析占比图';
        $scope.barChar = true;
        var demoOption = barLegend(textName, xAxisData, timeRate(timeseries(result)));
        var demoOption1 = pieLegend(xAxisData, textName, timeseries(result));
        demo.setOption(demoOption);
        demon.setOption(demoOption1);
      }
    }



    /**
     *   时间数据系列分类方法
     *  
     *  从后台传入时间数组：包含一系列小于5秒 5-10;10-20;20-30;30-40;50-60;以及大于60的时间
     *  
     *  定义一个数组长度为8的数组 seriesData;循环后台数组;大于10秒按照下标从2开始一直到7;小于10取%4
     *  下标为1;没有定义下标为0时间方位在【0-5】
     *   把数据放入到各个对应下标中
     *
     */
    function timeseries(result) {
      var seriesData = new Array(8); //图标x轴应该有8组数据
      var i;
      if (result.data.length === 0) {
        for (i = 0; i < seriesData.length; i++) {
          seriesData[i] = 0;
        }
        return seriesData;
      } else {
        var index, value;
        for (i = 0; i < result.data.length; i++) {
          value = result.data[i];
          if (result.data[i] >= 10) {
            index = parseInt(value / 10) < 7 ? parseInt(value / 10) + 1 : 7;
          } else {
            index = Math.floor((4 % value) / 4);
          }
          seriesData[index] = seriesData[index] || 0;
          seriesData[index] += result.data[i];
        }
        return seriesData;
      }
    }
    /**
     *  时间比例计算
     *  算出各个时间的总和；在迭代算出数据比例放入各个时间段内
     */
    function timeRate(seriesData) {
      var timeRateData = [];
      var sum = 0;
      var i;
      for (i = 0; i < seriesData.length; i++) {
        seriesData[i] = seriesData[i] || 0;
        sum += seriesData[i];
      }
      if (sum === 0) {
        for (i = 0; i < seriesData.length; i++) {
          timeRateData.push(0);
        }
      } else {
        for (i = 0; i < seriesData.length; i++) {
          timeRateData.push(seriesData[i] / sum);
        }
      }
      return timeRateData;
    }


    /**
     *  图例 
     * 显示进行格式化使数据可以漂浮在柱图上部
     * toFixed（）方法处理漂浮的数据 EVENT.CLICK
     */
    var dataStyle = {
      normal: {
        label: {
          show: true,
          position: 'top',
          formatter: function(a) {
            return (a.value * 100).toFixed(2) + '%';
          }
        }
      }
    };
    /**
     *  柱状图图例方法
     *  函数传入3个参数
     *  分别为图像标题,x轴数据,以及真实数据
     *  定位图形init方法:设置可点击事件
     */
    function barLegend(textName, xAxisData, seriesData, param) {
      var option = {
        title: {
          text: textName,
          x: 'center'
        },
        xAxis: [{
          type: 'category',
          data: xAxisData,
          name: '时长秒(s)'
        }],
        yAxis: [{
          type: 'value',
          name: '百分比(%)',
          axisLabel: {
            formatter: function(a) {
              return a * 100 + '%';
            }
          }
        }],
        series: [{
          type: 'bar',
          data: seriesData,
          itemStyle: dataStyle
        }]
      };
      var ecConfig = echarts.config;
      demo.on(ecConfig.EVENT.CLICK, eConsole);
      return option;
    }

    /**
     *  扇形图图例方法
     *  函数传入3个参数
     *  分别为图像标题,x轴数据,以及真实数据
     *  定位图形init方法:设置可点击事件
     */
    function pieLegend(xAxisData, textName, result, param) {
      var sum = 0;
      for (var i = 0; i < result.length; i++) {
        result[i] = result[i] || 0;
        sum += result[i];
      }
      var option = {
        title: {
          text: textName,
          x: 'center'
        },
        tooltip: {
          trigger: 'item',
          formatter: '{a} <br/>{b} '
        },
        calculable: true,
        series: [{
          name: '端到端时长',
          type: 'pie',
          radius: '70%',
          center: ['50%', '50%'],
          data: [{
            value: result[0],
            name: xAxisData[0] + ':\n' + (result[0] / sum * 100).toFixed(2) + '%',
            itemStyle: {
              normal: {
                label: {
                  show: false,
                },
                labelLine: {
                  length: 15,
                  show: false
                }
              }
            }
          }, {
            value: result[1].toFixed(2),
            name: xAxisData[1] + ':' + (result[1] / sum * 100).toFixed(2) + '%',
            itemStyle: {
              normal: {
                label: {
                  show: false
                },
                labelLine: {
                  length: 15,
                  show: false
                }
              }
            }
          }, {
            value: result[2].toFixed(2),
            name: xAxisData[2] + ':' + (result[2] / sum * 100).toFixed(2) + '%',
            itemStyle: {
              normal: {
                label: {
                  show: false
                },
                labelLine: {
                  length: 15,
                  show: false
                }
              }
            }
          }, {
            value: result[3].toFixed(2),
            name: xAxisData[3] + ':' + (result[2] / sum * 100).toFixed(2) + '%',
            itemStyle: {
              normal: {
                label: {
                  show: false
                },
                labelLine: {
                  length: 15,
                  show: false
                }
              }
            }
          }, {
            value: result[4].toFixed(2),
            name: xAxisData[4] + ':' + (result[4] / sum * 100).toFixed(2) + '%',
            itemStyle: {
              normal: {
                label: {
                  show: false
                },
                labelLine: {
                  length: 15,
                  show: false
                }
              }
            }
          }, {
            value: result[5].toFixed(2),
            name: xAxisData[5] + ':' + (result[5] / sum * 100).toFixed(2) + '%',
            itemStyle: {
              normal: {
                label: {
                  show: false
                },
                labelLine: {
                  length: 15,
                  show: false
                }
              }
            }
          }, {
            value: result[6].toFixed(2),
            name: xAxisData[6] + ':' + (result[6] / sum * 100).toFixed(2) + '%',
            itemStyle: {
              normal: {
                label: {
                  show: false
                },
                labelLine: {
                  length: 15,
                  show: false
                }
              }
            }
          }, {
            value: result[7].toFixed(2),
            name: xAxisData[7] + ':' + (result[7] / sum * 100).toFixed(2) + '%',
            itemStyle: {
              normal: {
                label: {
                  show: false
                },
                labelLine: {
                  length: 15,
                  show: false
                }
              }
            }
          }, ]
        }]
      };
      angular.forEach(option.series[0].data, function(item) {
        if (item.value > 60) {
          item.itemStyle.normal.label.show = true;
          item.itemStyle.normal.labelLine.show = true;
        }
      });
      var ecConfig = echarts.config;
      demon.on(ecConfig.EVENT.CLICK, eConsole);
      return option
    }
    /**
     * 图例的调整
     * 关闭图型显示， 打开表显示,调用查询方法
     */
    function eConsole() {

      $state.go('sas.faultLocation.endAnalysis.endDetailed');
    }

  }

})();